package com.chapter_3;

import java.util.LinkedList;
import java.util.Queue;

/**
 * @Author: Timo
 * @Date: 2019/5/14 17:08
 * @Description: 请求队列，主要用来放置请求的队列的。
 */
public class RequestQueue {
    private final Queue<Request> queue = new LinkedList<Request>();

    /**
     * 获取放在队列钟的请求
     * @return
     */
    public synchronized Request getRequest() {
        while (queue.peek() == null) {
            try {
                // 如果队列为空的话，就会一直等待。直到有请求进入队列
                wait();
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
        return queue.remove();
    }

    public synchronized void putRequest(Request request) {
        queue.offer(request);
        // 表示有请求入队列的时候就唤醒，所有等待的线程，可以获取请求了
        notifyAll();
    }
}
